package com.joolun.mall.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.joolun.common.enums.validate.Add;
import com.joolun.common.enums.validate.Update;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;


@Data
@EqualsAndHashCode(callSuper = true)
public class Chain extends Model<Chain> {
    /**
     * 接龙id
     */
    private Long id;


    /**
     * 接龙计划ID
     */
    private Long planId;


    /**
     * 链接图片（逗号分隔的相对路径）
     */
    @NotBlank(message =  "请上传链接图片", groups = {Add.class, Update.class})
    private String pics;

    /**
     * 接龙名称
     */
    @NotBlank(message =  "请填写接龙名称", groups = {Add.class, Update.class})
    private String name;


    /**
     * 微信短连接
     */
    private String wxLink;

    /**
     * 接龙介绍
     */
    /**
     * 接龙名称
     */
    @NotBlank(message =  "请填写接龙介绍", groups = {Add.class, Update.class})
    private String detail;

    /**
     * 最大接龙人数
     */
//    @TableField(fill = FieldFill.UPDATE)
    private Integer maxChainNum;

    /**
     * 最大可选件数
     */
//    @TableField(fill = FieldFill.UPDATE)
    private Integer maxPickNum;

    /**
     * 接龙开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    @NotBlank(message =  "请填写接龙开始时间", groups = {Add.class, Update.class})
    private Date beginDate;

    /**
     * 接龙结束时间
     */
//    @NotBlank(message =  "请填写接龙结束时间", groups = {Add.class, Update.class})
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endDate;

    /**
     * 状态（0正常 1停用）
     */

    private String status;

    /**
     * 删除标志（0存在 2删除）
     */
    private String delFlag;
    /** 创建者 */
    private String createBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新者 */
    private String updateBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /** 备注 */
    private String remark;

    //-----------查询参数 不在数据库表中的字段-------------------------------------------------------------------------------------------------------

    /**
     * 计划名称
     */
    @TableField(exist = false)
    private String planName;

    @TableField(exist = false)
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private List<Integer> brandIds;

    /**
     * 款号列表
     */
    @TableField(exist = false)
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private List<String> spuCodes;

    /**
     * sku列表
     */
    @TableField(exist = false)
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private List<String> skuCodes;

    /**
     * 创建时间--查询开始
     */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Date beginCreateTime;

    /**
     * 创建时间--查询结束
     */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Date endCreateTime;

    /**
     * 计划状态 0-未开始 10-进行中 20-已结束
     */
    @TableField(exist = false)
//    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Integer linkState;


    /**
     * 接龙开始时间 -- 开始时间
     */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Date beginBeginDate;

    /**
     * 接龙开始时间-- 结束
     */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Date endBeginDate;

    /**
     * 接龙结束时间 -- 开始时间
     */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Date beginEndDate;

    /**
     * 接龙结束时间 -- 结束时间
     */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Date endEndDate;


    //-----------返回参数 不在数据库表中的字段-------------------------------------------------------------------------------------------------------
    /**
     * 统一提示
     */
    @TableField(exist = false)
    private String remind;

    /**
     * 关联的接龙详情列表（非数据库字段）
     */
    @TableField(exist = false)
//    @Size(min = 1, message =  "请填写完整的接龙明细", groups = {Add.class, Update.class})
    private List<ChainDetail> details;


    /**
     * 接龙id
     */
    @TableField(exist = false)
    @JsonIgnore
    private List<Long> ids;

    /**
     * 上新款数
     */
    @TableField(exist = false)
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    private Integer spuCount;

    /**
     * 是否已接龙
     */
    @TableField(exist = false)
    private Boolean isAlready;



}
